<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 原型：prototype

        // 1.原型是一个对象
        // function Person(name,age){
        //     this.name = name;
        //     this.age = age;
        // }
        // Person.prototype.fn = function(){
        //     console.log("fn");
        // }
        // Person.prototype.fn2 = function(){
        //     console.log("fn2");
        // }

        // console.log(typeof Person.prototype);

        // 2.2种原型 ：显示原型（实例化之前） 和隐式原型（实例化之后）[[Prototype]] -->__proto__：
        // __proto__获取或者设置实例化之后的原型，不推荐；
        // _this  _str :一般是私有属性；
        // function Person(name,age){
        //     this.name = name;
        //     this.age = age;
        // }
        // // 构造函数里的原型被称为显示原型；
        // Person.prototype.fn = function(){
        //     console.log("fn");
        // }
        // Person.prototype.fn2 = function(){
        //     console.log("fn2");
        // }


        // let zhangsan  = new Person("张三",20);
        // 要获取隐式原型；
        //    var res =  Object.getPrototypeOf(zhangsan);
        //    console.log(res);
        // 设置隐式原型；
        // Object.setPrototypeOf(zhangsan,{height:"178cm"});
        // console.log(zhangsan);


        // console.log(Person.prototype===zhangsan.__proto__);

        // zhangsan.__proto__.fn3 = function(){
        //     console.log("fn3")
        // }
        // console.log(zhangsan);


        // 3.对象是由 自身属性和方法 + 原型的属性和方法共同构成；

        function Person(name, age) {
            this.name = name;
            this.age = age;
        }
        // 构造函数里的原型被称为显示原型；
        Person.prototype.fn = function () {
            console.log("fn");
        }
        Person.prototype.fn2 = function () {
            console.log("fn2");
        }

        let zhangsan = new Person("张三",20);
        // console.log(zhangsan);

        zhangsan.fn();
        zhangsan.fn2();
    </script>
</body>

</html>